package top.fyukina.fymil.internal.cmds;

import org.dom4j.Element;
import top.fyukina.fymil.DataType;
import top.fyukina.fymil.elements.Environment;
import java.math.BigDecimal;
import static top.fyukina.fymil.DataType.*;

public class Var implements Command {
    @Override
    public String registerName() {
        return "var";
    }
    @Override
    public void run(Element tag, Environment env) {
        String id = tag.attributeValue("id");
        if (id != null) {
            //获取操作类型
            String op = tag.attributeValue("op");
            //默认操作为赋值
            if (op == null || "set".equals(op)) {
                //解析标签内值
                String val = env.reg().strParser.parse(tag, env);
                String type = tag.attributeValue("type");
                //赋值的变量的值
                Object varVal = DataType.getDefaultNonType();
                //默认数值类型
                if (type == null || NUMBER.registerName().equals(type)) {
                    //标签内容为空则赋值为默认值
                    if (val.isBlank() && tag.isTextOnly()) {
                        varVal = NUMBER.getDefault();
                    } else {
                        varVal = env.reg().numParser.parse(tag, env);
                    }
                } else if (STRING.registerName().equals(type)) {
                    varVal = val;
                } else if (BOOLEAN.registerName().equals(type)) {
                    varVal = (val.isBlank() && tag.isTextOnly()) ||
                            Boolean.parseBoolean(val);
                }
                env.var().saveVar(id, varVal);
            } else if ("plus".equals(op)) {
                env.var().opVar(id, var -> {
                    if (var instanceof BigDecimal bd) {
                        return bd.add(BigDecimal.ONE);
                    }
                    return var;
                });
            }
        }
    }
}